#ifndef _MEMLAYOUT_H_
#define _MEMLAYOUT_H_

#include "types.h"

// 内核起始地址
#define KERNBASE 0x80000000L
// 物理内存顶部（根据你的实际内存大小调整）
#define PHYSTOP (KERNBASE + 128 * 1024 * 1024) // 例如128MB

// 设备内存映射区域
#define UART0 0x10000000L          // UART设备[citation:1]
#define VIRTIO0 0x10001000L        // VIRTIO设备[citation:1]

// 内核代码的结束地址（通常在链接脚本中定义，这里声明）
extern char etext[];
// 内核数据结束地址/空闲内存起始地址（在链接脚本中定义）
extern char end[];

// 最大虚拟地址（Sv39方案）[citation:10]
#define MAXVA (1L << (9 + 9 + 9 + 12 - 1)) // 0x3fffffffff

#endif // _MEMLAYOUT_H_